软件测试的概念和定义:
1972年,软件测试领域的先驱Bill Hetzel博士(代表论著《The Complete Guide to Software Testing》),提出了对软件测试的定义:“就是建立一种信心,认为程序能够按预期的设想运行。Establish confidence that a program does what it is supposed to do. ” 为表明软件正确而进行测试
1979年Glenford J. Myers(代表论著《The Art of Software Testing》)提出了对软件测试的定义:“测试是为发现错误而执行的一个程序或者系统的过程。The process of executing a program or system with the intent of finding errors.” 测试的目的是寻找错误,并且是尽最大可能找出最多的错误。Myers还给出了与测试相关的三个重要观点,那就是:
1、 测试是为了证明程序有错,而不是证明程序无错误;
2、 一个好的测试用例是在于它能发现至今未发现的错误;
3、 一个成功的测试是发现了至今未发现的错误的测试;
1983年Bill Hetzel博士将定义修订为:“评价一个程序和系统的特性或能力,并确定它是否达到预期的结果。软件测试就是以此为目的的任何行为。在设计规定的 环境下运行软件的功能,将其结果与用户需求或设计结果相比较,如果相符则测试通过,如果不相符则视为Bug。这一过程的终极目标是将软件的所有功能在所有设计规定的环境全部运行,并通过。软件测试定义发生了改变,测试不单纯是一个发现错误的过程,而且将测试作为软件质量保证(SQA)的主要职能,包含软件质量评价的内容。测试是以评价一个程序或者系统属性为目标的任何一种活动。测试是对软件质量的度量。 所以到现在软件测试也有了行业标准(IEEE/ANSI),“使用人工或自动的手段来运行或测定某个软件系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别”。这个定义明确指出:软件测试的目的是为了检验软件系统是否满足需求。它再也不是一个一次性的,而且只是开发后期的活动,而是与整个开发流程融合成一体。总结:软件测试这个行业的定义到目前为止是4个:a.从为了表明软件是正确而测试的正向性测试。→b.从为了表明软件是错误而测试的反向性测试。→ c.到按照需求来进行测试,符合需求的则认为测试通过,不符合的则认为有bug。→d.到现在都用的行业标准:测试不单纯是一个发现错误的过程。主要是从软件质量的角度来测试。 软件测试的成熟度:CMM(能力成熟度模型Capability Maturity Model,英文缩写为CMM)逐渐成为了评估软件开发过程的管理以及工程能力的标准。CMM的核心是把软件开发视为一个过程,并根据这一原则对软件开发和维护过程进行监控和研究。Burnstein博士提出了测试成熟度模型(TMM),依据CMM的框架提出测试的5个不同级别,关注于测试的成熟度模型。 TMM 测试成熟度分解为 5 级别,关注于 5 个成熟度级别递增: Phase 0 :测试和调试没有区别,初了支持调试外,测试没有其他目的 Phase 1 :测试的目的是为了表明软件能够工作 Phase 2 :测试的目的是为了表明软件不能够能够正常工作 Phase 3 :测试的目的不是要证明什么,而是为了把软件不能正常工作的预知风险降低到能够接受的程度 Phase 4 : 测试不是行为,而是一种自觉的约束 (mental discipline) ,不用太多的测试投入产生低风险的软件上的 。 总结:CMM更注重于管理软件得过程。 软件测试模型的演变V模型:改进软件开发的效率和效果。
W模型:测试是伴随着整个软件开发周期。而且测试的对象不仅仅是程序,需求、设计等同样要测试,也就是说,测试与开发是同步进行的。W模型有利于尽早地全面的发现问题。例如,需求分析完成后,测试人员就应该参与到对需求的验证和确认活动中,以尽早地找出缺陷所在。同时,对需求的测试也有利于及时了解项目难度和测试风险,及早制定应对措施,这将显著减少总体测试时间,加快项目进度。
总结:
V模型的局限性是把测试作为编码之后的一个阶段,是针对程序而寻找错误的活动,,而忽视了测试活动对需求分析,系统设计等活动的验证和确认的功能。
W模型的局限性是在W模型中,需求、设计、编码等活动被视为串行的,同时,测试和开发活动也保持着一种线性的前后关系,上一阶段完全结束,才可正式开始下一个阶段工作。
软件测试的起源与发展这篇文章来源于 51testing博客,作者是 袁琳 网址